import java.util.PriorityQueue;

public class NM {
    //算法题：长度最小的子数组；
    //算法原理：滑动窗口思想；
    //题目描述：给定一个数组和一个目标值，
    // 要求返回数组元素加和大于等于target的最小子数组的长度；
    public static int fun(int[] array,int target){
        int n=array.length;
        int sum=0;//判断子数组长度的加和；
        int len=Integer.MAX_VALUE;
        //由于要找到最小的子数长度，
        // 所以就需要先设置其为最大的长度，方便获取到最小子数组长度；
        for(int left=0,right=0;right<n;right++){
            sum=sum+array[right];//进窗口操作；
            //进窗口后进行判断是否满足出窗口的条件；
            //若满足出窗口条件就需要进行更新结果；
            //作用：①为出窗口做准备；
            ///////②：为下一次进窗口做准备；
            while(sum>=target){
                len=Math.min(len,right-left+1); //更新结果；
                sum=sum-array[left++];//出窗口操作；
            }
        }
        return len;
    }
    public static void main(String[] args){
        int[] array={2,3,1,2,4,3};
        int len=fun(array,7);
        System.out.print(len);
    }
}
